home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 9 / The PC-SIG Library on CD ROM - Ninth Edition.iso / 001_100 / DISK0047 / DISK0047.ZIP / COMPRESS.BAS < prev    next >
BASIC Source File  |  1982-06-06  |  5KB  |  73 lines

  1. 10  '*****************************************************************
  2. 20  '***********                                           ***********
  3. 30  '***********       COMPRESS [Any BASIC Program]        ***********
  4. 40  '***********                                           ***********
  5. 50  '*****************************************************************
  6. 60   '         *   COPYRIGHT 1982  -  CRAIG W. UTHE        *
  7. 70   '         *   WRITTEN 3/13/82 BY CRAIG W. UTHE        *
  8. 80   '         *                 * * * *                   *
  9. 90   '         *   ANY INDIVIDUAL MAY COPY THIS PROGRAM    *
  10. 100  '         *   AND MAKE MODIFICATIONS TO IT IF THAT    *
  11. 110  '         *   INDIVIDUAL ARRANGES TO CONTRIBUTE ONE   *
  12. 120  '         *   OTHER PROGRAM TO THE IPCO SOFTWARE      *
  13. 130  '         *   EXCHANGE LIBRARY.  HOWEVER, COPIES      *
  14. 140  '         *   ARE NOT ALLOWED TO BE SOLD, NOT IN      *
  15. 150  '         *   WHOLE NOR IN PART, NOT SEPARATELY       *
  16. 160  '         *   NOR JOINTLY WITH OTHER SOFTWARE.        *
  17. 170  '         *********************************************
  18. 180  '
  19. 190  '
  20. 200   'This is a preprocessor for BASIC which deletes all
  21. 210   ' '-comments and extra spaces (except when in quotes).
  22. 220   'All '-comment-only lines are deleted.  Line numbers will
  23. 230   'be displayed as lines are compressed, except for deleted lines.
  24. 240   '
  25. 250   '**An early test-run on a very-structured program reduced the
  26. 260   '**program from 20,600 B to 9,600 B.  (ASCII format storage
  27. 270   '**was about 1 K greater for each.)  Apparently, COMPRESS
  28. 280   '**cut the size of the program to LESS than HALF!!!!
  29. 290   '**BUT, it takes a LONG time:  2 to 3 seconds/line
  30. 300   '
  31. 310   '
  32. 320   'BE SURE that the BASIC uncompressed file is stored as an
  33. 330   'ASCII file -- this program does not check for this!!!
  34. 340   '
  35. 500 'Mainflow-control routine
  36. 510     PRINT : PRINT "ENTER NAME OF FILE TO BE COMPRESSED."
  37. 520     PRINT "MUST have extention .BAS (Do not give extention)."
  38. 530     PRINT "Result will be stored in <filename>.CMP ."
  39. 540     PRINT "(MUST have been stored as ASCII file):";
  40. 550     INPUT FILENAME$
  41. 560     PRINT : PRINT "ENTER LINE NUMBER OF FIRST LINE TO BE COMPRESSED."
  42. 570     PRINT "COMPRESS starts compression after this number is"
  43. 580     PRINT "reached or passed.  You may respond with 0:";
  44. 590     INPUT START.LINE.NUMBER% : PRINT
  45. 600     OPEN FILENAME$+".BAS" FOR INPUT AS #1
  46. 610     OPEN FILENAME$+".CMP" FOR OUTPUT AS #2
  47. 620     WHILE NOT EOF(1)
  48. 630             OUTLINE$ = STRING$(255,0) : J% = 1
  49. 640             LINE INPUT#1, INLINE$
  50. 650             IF VAL(MID$(INLINE$,1, INSTR(INLINE$," "))) < START.LINE.NUMBER%                        THEN PRINT#2, INLINE$ : PRINT LEFT$(INLINE$,                                            INSTR(INLINE$, " ")) : GOTO 710
  51. 660             I% = 1
  52. 670             WHILE I% <= LEN(INLINE$)
  53. 680                     IF MID$(INLINE$,I%,1) = CHR$(34)                                                        THEN GOSUB 1000 ELSE GOSUB 2000                                                 '1000 = in-quotes rtn; 2000 = out-of-quotes rtn
  54. 690                     WEND
  55. 700             IF NOT MID$(OUTLINE$, (1 + INSTR(OUTLINE$," ")), 1) = "'"                               THEN PRINT#2, LEFT$(OUTLINE$,J%-1)                                                      : PRINT LEFT$(OUTLINE$, INSTR(OUTLINE$, " "))
  56. 710             WEND
  57. 720     BEEP : PRINT "COMPRESSED PROGRAM STORED AS "FILENAME$+".CMP" : END
  58. 730  '
  59. 1000 'In-quotes-preprocessing routine
  60. 1010    CHARS.TIL.NEXT.QUOTE% = INSTR(MID$(INLINE$,I%+1), CHR$(34))
  61. 1020    IF CHARS.TIL.NEXT.QUOTE% = 0                                                            THEN CHARS.TIL.NEXT.QUOTE% = LEN(INLINE$) - I%
  62. 1030    MID$(OUTLINE$,J%, CHARS.TIL.NEXT.QUOTE% + 1)                                            = MID$(INLINE$,I%, CHARS.TIL.NEXT.QUOTE% + 1)
  63. 1040    I% = I% + CHARS.TIL.NEXT.QUOTE% + 1
  64. 1050    J% = J% + CHARS.TIL.NEXT.QUOTE% + 1
  65. 1060    RETURN
  66. 1070 '
  67. 2000 'Out-of-quotes-preprocessing routine
  68. 2010    IF MID$(INLINE$, I%, 1) = "'"  THEN MID$(OUTLINE$,J%,1) = "'"                           : J% = J% + ABS(J% = (1+INSTR(OUTLINE$," ")))                                   : I% = I% + LEN(INLINE$) + 1   : GOTO 2050 'RETURN
  69. 2020    IF MID$(INLINE$, I%, 1) = " " AND MID$(INLINE$, I% + 1, 1) = " "                        THEN I% = I% + 1 : GOTO 2050 'RETURN
  70. 2030    'ELSE
  71. 2040            MID$(OUTLINE$, J%, 1) = MID$(INLINE$, I%, 1)                                            : J% = J% + 1 : I% = I% + 1
  72. 2050    RETURN
  73. UTLI